//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS WorkDocs service.
///
/// The Amazon WorkDocs API is designed for the following use cases:   File Migration: File migration applications are supported for users who want to migrate their files from an on-premises or off-premises file system or service. Users can insert files into a user directory structure, as well as allow for basic metadata changes, such as modifications to the permissions of files.   Security: Support security applications are supported for users who have additional security needs, such as antivirus or data loss prevention. The API actions, along with CloudTrail, allow these applications to detect when changes occur in Amazon WorkDocs. Then, the application can take the necessary actions and replace the target file. If the target file violates the policy, the application can also choose to email the user.   eDiscovery/Analytics: General administrative applications are supported, such as eDiscovery and analytics. These applications can choose to mimic or record the actions in an Amazon WorkDocs site, along with CloudTrail, to replicate data for eDiscovery, backup, or analytical applications.   All Amazon WorkDocs API actions are Amazon authenticated and certificate-signed. They not only require the use of the Amazon Web Services SDK, but also allow for the exclusive use of IAM users and roles to help facilitate access, trust, and permission policies. By creating a role and allowing an IAM user to access the Amazon WorkDocs site, the IAM user gains full administrative visibility into the entire Amazon WorkDocs site (or as set in the IAM policy). This includes, but is not limited to, the ability to modify file permissions and upload any file to any user. This allows developers to perform the three use cases above, as well as give users the ability to grant access on a selective basis using the IAM model.  The pricing for Amazon WorkDocs APIs varies depending on the API call type for these actions:    READ  (Get*)     WRITE (Activate*, Add*, Create*, Deactivate*, Initiate*, Update*)     LIST (Describe*)     DELETE*, CANCEL    For information about Amazon WorkDocs API pricing, see Amazon WorkDocs Pricing.
public struct WorkDocs: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the WorkDocs client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "WorkDocs",
            serviceIdentifier: "workdocs",
            serviceProtocol: .restjson,
            apiVersion: "2016-05-01",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: WorkDocsErrorType.self,
            xmlNamespace: "https://aws.amazon.com/api/v1/",
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-east-1": "workdocs-fips.us-east-1.amazonaws.com",
            "us-west-2": "workdocs-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Aborts the upload of the specified document version that was previously initiated by InitiateDocumentVersionUpload. The client should make this call only when it no longer intends to upload the document version, or fails to do so.
    @Sendable
    @inlinable
    public func abortDocumentVersionUpload(_ input: AbortDocumentVersionUploadRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "AbortDocumentVersionUpload", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Aborts the upload of the specified document version that was previously initiated by InitiateDocumentVersionUpload. The client should make this call only when it no longer intends to upload the document version, or fails to do so.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - versionId: The ID of the version.
    ///   - logger: Logger use during operation
    @inlinable
    public func abortDocumentVersionUpload(
        authenticationToken: String? = nil,
        documentId: String,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = AbortDocumentVersionUploadRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            versionId: versionId
        )
        return try await self.abortDocumentVersionUpload(input, logger: logger)
    }

    /// Activates the specified user. Only active users can access Amazon WorkDocs.
    @Sendable
    @inlinable
    public func activateUser(_ input: ActivateUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ActivateUserResponse {
        try await self.client.execute(
            operation: "ActivateUser", 
            path: "/api/v1/users/{UserId}/activation", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Activates the specified user. Only active users can access Amazon WorkDocs.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - userId: The ID of the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func activateUser(
        authenticationToken: String? = nil,
        userId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ActivateUserResponse {
        let input = ActivateUserRequest(
            authenticationToken: authenticationToken, 
            userId: userId
        )
        return try await self.activateUser(input, logger: logger)
    }

    /// Creates a set of permissions for the specified folder or document. The resource permissions are overwritten if the principals already have different permissions.
    @Sendable
    @inlinable
    public func addResourcePermissions(_ input: AddResourcePermissionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddResourcePermissionsResponse {
        try await self.client.execute(
            operation: "AddResourcePermissions", 
            path: "/api/v1/resources/{ResourceId}/permissions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a set of permissions for the specified folder or document. The resource permissions are overwritten if the principals already have different permissions.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - notificationOptions: The notification options.
    ///   - principals: The users, groups, or organization being granted permission.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func addResourcePermissions(
        authenticationToken: String? = nil,
        notificationOptions: NotificationOptions? = nil,
        principals: [SharePrincipal],
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddResourcePermissionsResponse {
        let input = AddResourcePermissionsRequest(
            authenticationToken: authenticationToken, 
            notificationOptions: notificationOptions, 
            principals: principals, 
            resourceId: resourceId
        )
        return try await self.addResourcePermissions(input, logger: logger)
    }

    /// Adds a new comment to the specified document version.
    @Sendable
    @inlinable
    public func createComment(_ input: CreateCommentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCommentResponse {
        try await self.client.execute(
            operation: "CreateComment", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}/comment", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a new comment to the specified document version.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - notifyCollaborators: Set this parameter to TRUE to send an email out to the document collaborators after the comment is created.
    ///   - parentId: The ID of the parent comment.
    ///   - text: The text of the comment.
    ///   - threadId: The ID of the root comment in the thread.
    ///   - versionId: The ID of the document version.
    ///   - visibility: The visibility of the comment. Options are either PRIVATE, where the comment is visible only to the comment author and document owner and co-owners, or PUBLIC, where the comment is visible to document owners, co-owners, and contributors.
    ///   - logger: Logger use during operation
    @inlinable
    public func createComment(
        authenticationToken: String? = nil,
        documentId: String,
        notifyCollaborators: Bool? = nil,
        parentId: String? = nil,
        text: String,
        threadId: String? = nil,
        versionId: String,
        visibility: CommentVisibilityType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCommentResponse {
        let input = CreateCommentRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            notifyCollaborators: notifyCollaborators, 
            parentId: parentId, 
            text: text, 
            threadId: threadId, 
            versionId: versionId, 
            visibility: visibility
        )
        return try await self.createComment(input, logger: logger)
    }

    /// Adds one or more custom properties to the specified resource (a folder, document, or version).
    @Sendable
    @inlinable
    public func createCustomMetadata(_ input: CreateCustomMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCustomMetadataResponse {
        try await self.client.execute(
            operation: "CreateCustomMetadata", 
            path: "/api/v1/resources/{ResourceId}/customMetadata", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds one or more custom properties to the specified resource (a folder, document, or version).
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - customMetadata: Custom metadata in the form of name-value pairs.
    ///   - resourceId: The ID of the resource.
    ///   - versionId: The ID of the version, if the custom metadata is being added to a document version.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCustomMetadata(
        authenticationToken: String? = nil,
        customMetadata: [String: String],
        resourceId: String,
        versionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCustomMetadataResponse {
        let input = CreateCustomMetadataRequest(
            authenticationToken: authenticationToken, 
            customMetadata: customMetadata, 
            resourceId: resourceId, 
            versionId: versionId
        )
        return try await self.createCustomMetadata(input, logger: logger)
    }

    /// Creates a folder with the specified name and parent folder.
    @Sendable
    @inlinable
    public func createFolder(_ input: CreateFolderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFolderResponse {
        try await self.client.execute(
            operation: "CreateFolder", 
            path: "/api/v1/folders", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a folder with the specified name and parent folder.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - name: The name of the new folder.
    ///   - parentFolderId: The ID of the parent folder.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFolder(
        authenticationToken: String? = nil,
        name: String? = nil,
        parentFolderId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFolderResponse {
        let input = CreateFolderRequest(
            authenticationToken: authenticationToken, 
            name: name, 
            parentFolderId: parentFolderId
        )
        return try await self.createFolder(input, logger: logger)
    }

    /// Adds the specified list of labels to the given resource (a document or folder)
    @Sendable
    @inlinable
    public func createLabels(_ input: CreateLabelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateLabelsResponse {
        try await self.client.execute(
            operation: "CreateLabels", 
            path: "/api/v1/resources/{ResourceId}/labels", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds the specified list of labels to the given resource (a document or folder)
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - labels: List of labels to add to the resource.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func createLabels(
        authenticationToken: String? = nil,
        labels: [String],
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateLabelsResponse {
        let input = CreateLabelsRequest(
            authenticationToken: authenticationToken, 
            labels: labels, 
            resourceId: resourceId
        )
        return try await self.createLabels(input, logger: logger)
    }

    /// Configure Amazon WorkDocs to use Amazon SNS notifications. The endpoint receives a confirmation message, and must confirm the subscription. For more information, see Setting up notifications for an IAM user or role in the Amazon WorkDocs Developer Guide.
    @Sendable
    @inlinable
    public func createNotificationSubscription(_ input: CreateNotificationSubscriptionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateNotificationSubscriptionResponse {
        try await self.client.execute(
            operation: "CreateNotificationSubscription", 
            path: "/api/v1/organizations/{OrganizationId}/subscriptions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Configure Amazon WorkDocs to use Amazon SNS notifications. The endpoint receives a confirmation message, and must confirm the subscription. For more information, see Setting up notifications for an IAM user or role in the Amazon WorkDocs Developer Guide.
    ///
    /// Parameters:
    ///   - endpoint: The endpoint to receive the notifications. If the protocol is HTTPS, the endpoint is a URL that begins with https.
    ///   - organizationId: The ID of the organization.
    ///   - protocol: The protocol to use. The supported value is https, which delivers JSON-encoded messages using HTTPS POST.
    ///   - subscriptionType: The notification type.
    ///   - logger: Logger use during operation
    @inlinable
    public func createNotificationSubscription(
        endpoint: String,
        organizationId: String,
        protocol: SubscriptionProtocolType,
        subscriptionType: SubscriptionType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateNotificationSubscriptionResponse {
        let input = CreateNotificationSubscriptionRequest(
            endpoint: endpoint, 
            organizationId: organizationId, 
            protocol: `protocol`, 
            subscriptionType: subscriptionType
        )
        return try await self.createNotificationSubscription(input, logger: logger)
    }

    /// Creates a user in a Simple AD or Microsoft AD directory. The status of a newly created user is "ACTIVE". New users can access Amazon WorkDocs.
    @Sendable
    @inlinable
    public func createUser(_ input: CreateUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateUserResponse {
        try await self.client.execute(
            operation: "CreateUser", 
            path: "/api/v1/users", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a user in a Simple AD or Microsoft AD directory. The status of a newly created user is "ACTIVE". New users can access Amazon WorkDocs.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - emailAddress: The email address of the user.
    ///   - givenName: The given name of the user.
    ///   - organizationId: The ID of the organization.
    ///   - password: The password of the user.
    ///   - storageRule: The amount of storage for the user.
    ///   - surname: The surname of the user.
    ///   - timeZoneId: The time zone ID of the user.
    ///   - username: The login name of the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func createUser(
        authenticationToken: String? = nil,
        emailAddress: String? = nil,
        givenName: String,
        organizationId: String? = nil,
        password: String,
        storageRule: StorageRuleType? = nil,
        surname: String,
        timeZoneId: String? = nil,
        username: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateUserResponse {
        let input = CreateUserRequest(
            authenticationToken: authenticationToken, 
            emailAddress: emailAddress, 
            givenName: givenName, 
            organizationId: organizationId, 
            password: password, 
            storageRule: storageRule, 
            surname: surname, 
            timeZoneId: timeZoneId, 
            username: username
        )
        return try await self.createUser(input, logger: logger)
    }

    /// Deactivates the specified user, which revokes the user's access to Amazon WorkDocs.
    @Sendable
    @inlinable
    public func deactivateUser(_ input: DeactivateUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeactivateUser", 
            path: "/api/v1/users/{UserId}/activation", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deactivates the specified user, which revokes the user's access to Amazon WorkDocs.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - userId: The ID of the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func deactivateUser(
        authenticationToken: String? = nil,
        userId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeactivateUserRequest(
            authenticationToken: authenticationToken, 
            userId: userId
        )
        return try await self.deactivateUser(input, logger: logger)
    }

    /// Deletes the specified comment from the document version.
    @Sendable
    @inlinable
    public func deleteComment(_ input: DeleteCommentRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteComment", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}/comment/{CommentId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified comment from the document version.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - commentId: The ID of the comment.
    ///   - documentId: The ID of the document.
    ///   - versionId: The ID of the document version.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteComment(
        authenticationToken: String? = nil,
        commentId: String,
        documentId: String,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteCommentRequest(
            authenticationToken: authenticationToken, 
            commentId: commentId, 
            documentId: documentId, 
            versionId: versionId
        )
        return try await self.deleteComment(input, logger: logger)
    }

    /// Deletes custom metadata from the specified resource.
    @Sendable
    @inlinable
    public func deleteCustomMetadata(_ input: DeleteCustomMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCustomMetadataResponse {
        try await self.client.execute(
            operation: "DeleteCustomMetadata", 
            path: "/api/v1/resources/{ResourceId}/customMetadata", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes custom metadata from the specified resource.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - deleteAll: Flag to indicate removal of all custom metadata properties from the specified resource.
    ///   - keys: List of properties to remove.
    ///   - resourceId: The ID of the resource, either a document or folder.
    ///   - versionId: The ID of the version, if the custom metadata is being deleted from a document version.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCustomMetadata(
        authenticationToken: String? = nil,
        deleteAll: Bool? = nil,
        keys: [String]? = nil,
        resourceId: String,
        versionId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCustomMetadataResponse {
        let input = DeleteCustomMetadataRequest(
            authenticationToken: authenticationToken, 
            deleteAll: deleteAll, 
            keys: keys, 
            resourceId: resourceId, 
            versionId: versionId
        )
        return try await self.deleteCustomMetadata(input, logger: logger)
    }

    /// Permanently deletes the specified document and its associated metadata.
    @Sendable
    @inlinable
    public func deleteDocument(_ input: DeleteDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDocument", 
            path: "/api/v1/documents/{DocumentId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Permanently deletes the specified document and its associated metadata.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocument(
        authenticationToken: String? = nil,
        documentId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDocumentRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId
        )
        return try await self.deleteDocument(input, logger: logger)
    }

    /// Deletes a specific version of a document.
    @Sendable
    @inlinable
    public func deleteDocumentVersion(_ input: DeleteDocumentVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteDocumentVersion", 
            path: "/api/v1/documentVersions/{DocumentId}/versions/{VersionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specific version of a document.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - deletePriorVersions: Deletes all versions of a document prior to the current version.
    ///   - documentId: The ID of the document associated with the version being deleted.
    ///   - versionId: The ID of the version being deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocumentVersion(
        authenticationToken: String? = nil,
        deletePriorVersions: Bool = false,
        documentId: String,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteDocumentVersionRequest(
            authenticationToken: authenticationToken, 
            deletePriorVersions: deletePriorVersions, 
            documentId: documentId, 
            versionId: versionId
        )
        return try await self.deleteDocumentVersion(input, logger: logger)
    }

    /// Permanently deletes the specified folder and its contents.
    @Sendable
    @inlinable
    public func deleteFolder(_ input: DeleteFolderRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteFolder", 
            path: "/api/v1/folders/{FolderId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Permanently deletes the specified folder and its contents.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFolder(
        authenticationToken: String? = nil,
        folderId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteFolderRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId
        )
        return try await self.deleteFolder(input, logger: logger)
    }

    /// Deletes the contents of the specified folder.
    @Sendable
    @inlinable
    public func deleteFolderContents(_ input: DeleteFolderContentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteFolderContents", 
            path: "/api/v1/folders/{FolderId}/contents", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the contents of the specified folder.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFolderContents(
        authenticationToken: String? = nil,
        folderId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteFolderContentsRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId
        )
        return try await self.deleteFolderContents(input, logger: logger)
    }

    /// Deletes the specified list of labels from a resource.
    @Sendable
    @inlinable
    public func deleteLabels(_ input: DeleteLabelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteLabelsResponse {
        try await self.client.execute(
            operation: "DeleteLabels", 
            path: "/api/v1/resources/{ResourceId}/labels", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified list of labels from a resource.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - deleteAll: Flag to request removal of all labels from the specified resource.
    ///   - labels: List of labels to delete from the resource.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteLabels(
        authenticationToken: String? = nil,
        deleteAll: Bool? = nil,
        labels: [String]? = nil,
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteLabelsResponse {
        let input = DeleteLabelsRequest(
            authenticationToken: authenticationToken, 
            deleteAll: deleteAll, 
            labels: labels, 
            resourceId: resourceId
        )
        return try await self.deleteLabels(input, logger: logger)
    }

    /// Deletes the specified subscription from the specified organization.
    @Sendable
    @inlinable
    public func deleteNotificationSubscription(_ input: DeleteNotificationSubscriptionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteNotificationSubscription", 
            path: "/api/v1/organizations/{OrganizationId}/subscriptions/{SubscriptionId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified subscription from the specified organization.
    ///
    /// Parameters:
    ///   - organizationId: The ID of the organization.
    ///   - subscriptionId: The ID of the subscription.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteNotificationSubscription(
        organizationId: String,
        subscriptionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteNotificationSubscriptionRequest(
            organizationId: organizationId, 
            subscriptionId: subscriptionId
        )
        return try await self.deleteNotificationSubscription(input, logger: logger)
    }

    /// Deletes the specified user from a Simple AD or Microsoft AD directory.  Deleting a user immediately and permanently deletes all content in that user's folder structure. Site retention policies do NOT apply to this type of deletion.
    @Sendable
    @inlinable
    public func deleteUser(_ input: DeleteUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteUser", 
            path: "/api/v1/users/{UserId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified user from a Simple AD or Microsoft AD directory.  Deleting a user immediately and permanently deletes all content in that user's folder structure. Site retention policies do NOT apply to this type of deletion.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Do not set this field when using administrative API actions, as in accessing the API using Amazon Web Services credentials.
    ///   - userId: The ID of the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteUser(
        authenticationToken: String? = nil,
        userId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteUserRequest(
            authenticationToken: authenticationToken, 
            userId: userId
        )
        return try await self.deleteUser(input, logger: logger)
    }

    /// Describes the user activities in a specified time period.
    @Sendable
    @inlinable
    public func describeActivities(_ input: DescribeActivitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeActivitiesResponse {
        try await self.client.execute(
            operation: "DescribeActivities", 
            path: "/api/v1/activities", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the user activities in a specified time period.
    ///
    /// Parameters:
    ///   - activityTypes: Specifies which activity types to include in the response. If this field is left empty, all activity types are returned.
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - endTime: The timestamp that determines the end time of the activities. The response includes the activities performed before the specified timestamp.
    ///   - includeIndirectActivities: Includes indirect activities. An indirect activity results from a direct activity performed on a parent resource. For example, sharing a parent folder (the direct activity) shares all of the subfolders and documents within the parent folder (the indirect activity).
    ///   - limit: The maximum number of items to return.
    ///   - marker: The marker for the next set of results.
    ///   - organizationId: The ID of the organization. This is a mandatory parameter when using administrative API (SigV4) requests.
    ///   - resourceId: The document or folder ID for which to describe activity types.
    ///   - startTime: The timestamp that determines the starting time of the activities. The response includes the activities performed after the specified timestamp.
    ///   - userId: The ID of the user who performed the action. The response includes activities pertaining to this user. This is an optional parameter and is only applicable for administrative API (SigV4) requests.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeActivities(
        activityTypes: String? = nil,
        authenticationToken: String? = nil,
        endTime: Date? = nil,
        includeIndirectActivities: Bool? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        organizationId: String? = nil,
        resourceId: String? = nil,
        startTime: Date? = nil,
        userId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeActivitiesResponse {
        let input = DescribeActivitiesRequest(
            activityTypes: activityTypes, 
            authenticationToken: authenticationToken, 
            endTime: endTime, 
            includeIndirectActivities: includeIndirectActivities, 
            limit: limit, 
            marker: marker, 
            organizationId: organizationId, 
            resourceId: resourceId, 
            startTime: startTime, 
            userId: userId
        )
        return try await self.describeActivities(input, logger: logger)
    }

    /// List all the comments for the specified document version.
    @Sendable
    @inlinable
    public func describeComments(_ input: DescribeCommentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeCommentsResponse {
        try await self.client.execute(
            operation: "DescribeComments", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}/comments", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List all the comments for the specified document version.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - limit: The maximum number of items to return.
    ///   - marker: The marker for the next set of results. This marker was received from a previous call.
    ///   - versionId: The ID of the document version.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeComments(
        authenticationToken: String? = nil,
        documentId: String,
        limit: Int? = nil,
        marker: String? = nil,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeCommentsResponse {
        let input = DescribeCommentsRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            limit: limit, 
            marker: marker, 
            versionId: versionId
        )
        return try await self.describeComments(input, logger: logger)
    }

    /// Retrieves the document versions for the specified document. By default, only active versions are returned.
    @Sendable
    @inlinable
    public func describeDocumentVersions(_ input: DescribeDocumentVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDocumentVersionsResponse {
        try await self.client.execute(
            operation: "DescribeDocumentVersions", 
            path: "/api/v1/documents/{DocumentId}/versions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the document versions for the specified document. By default, only active versions are returned.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - fields: Specify "SOURCE" to include initialized versions and a URL for the source document.
    ///   - include: A comma-separated list of values. Specify "INITIALIZED" to include incomplete versions.
    ///   - limit: The maximum number of versions to return with this call.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDocumentVersions(
        authenticationToken: String? = nil,
        documentId: String,
        fields: String? = nil,
        include: String? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDocumentVersionsResponse {
        let input = DescribeDocumentVersionsRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            fields: fields, 
            include: include, 
            limit: limit, 
            marker: marker
        )
        return try await self.describeDocumentVersions(input, logger: logger)
    }

    /// Describes the contents of the specified folder, including its documents and subfolders. By default, Amazon WorkDocs returns the first 100 active document and folder metadata items. If there are more results, the response includes a marker that you can use to request the next set of results. You can also request initialized documents.
    @Sendable
    @inlinable
    public func describeFolderContents(_ input: DescribeFolderContentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFolderContentsResponse {
        try await self.client.execute(
            operation: "DescribeFolderContents", 
            path: "/api/v1/folders/{FolderId}/contents", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the contents of the specified folder, including its documents and subfolders. By default, Amazon WorkDocs returns the first 100 active document and folder metadata items. If there are more results, the response includes a marker that you can use to request the next set of results. You can also request initialized documents.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - include: The contents to include. Specify "INITIALIZED" to include initialized documents.
    ///   - limit: The maximum number of items to return with this call.
    ///   - marker: The marker for the next set of results. This marker was received from a previous call.
    ///   - order: The order for the contents of the folder.
    ///   - sort: The sorting criteria.
    ///   - type: The type of items.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFolderContents(
        authenticationToken: String? = nil,
        folderId: String,
        include: String? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        order: OrderType? = nil,
        sort: ResourceSortType? = nil,
        type: FolderContentType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFolderContentsResponse {
        let input = DescribeFolderContentsRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId, 
            include: include, 
            limit: limit, 
            marker: marker, 
            order: order, 
            sort: sort, 
            type: type
        )
        return try await self.describeFolderContents(input, logger: logger)
    }

    /// Describes the groups specified by the query. Groups are defined by the underlying Active Directory.
    @Sendable
    @inlinable
    public func describeGroups(_ input: DescribeGroupsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeGroupsResponse {
        try await self.client.execute(
            operation: "DescribeGroups", 
            path: "/api/v1/groups", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the groups specified by the query. Groups are defined by the underlying Active Directory.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - limit: The maximum number of items to return with this call.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call.)
    ///   - organizationId: The ID of the organization.
    ///   - searchQuery: A query to describe groups by group name.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeGroups(
        authenticationToken: String? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        organizationId: String? = nil,
        searchQuery: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeGroupsResponse {
        let input = DescribeGroupsRequest(
            authenticationToken: authenticationToken, 
            limit: limit, 
            marker: marker, 
            organizationId: organizationId, 
            searchQuery: searchQuery
        )
        return try await self.describeGroups(input, logger: logger)
    }

    /// Lists the specified notification subscriptions.
    @Sendable
    @inlinable
    public func describeNotificationSubscriptions(_ input: DescribeNotificationSubscriptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeNotificationSubscriptionsResponse {
        try await self.client.execute(
            operation: "DescribeNotificationSubscriptions", 
            path: "/api/v1/organizations/{OrganizationId}/subscriptions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the specified notification subscriptions.
    ///
    /// Parameters:
    ///   - limit: The maximum number of items to return with this call.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call.)
    ///   - organizationId: The ID of the organization.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeNotificationSubscriptions(
        limit: Int? = nil,
        marker: String? = nil,
        organizationId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeNotificationSubscriptionsResponse {
        let input = DescribeNotificationSubscriptionsRequest(
            limit: limit, 
            marker: marker, 
            organizationId: organizationId
        )
        return try await self.describeNotificationSubscriptions(input, logger: logger)
    }

    /// Describes the permissions of a specified resource.
    @Sendable
    @inlinable
    public func describeResourcePermissions(_ input: DescribeResourcePermissionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResourcePermissionsResponse {
        try await self.client.execute(
            operation: "DescribeResourcePermissions", 
            path: "/api/v1/resources/{ResourceId}/permissions", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the permissions of a specified resource.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - limit: The maximum number of items to return with this call.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call)
    ///   - principalId: The ID of the principal to filter permissions by.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResourcePermissions(
        authenticationToken: String? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        principalId: String? = nil,
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResourcePermissionsResponse {
        let input = DescribeResourcePermissionsRequest(
            authenticationToken: authenticationToken, 
            limit: limit, 
            marker: marker, 
            principalId: principalId, 
            resourceId: resourceId
        )
        return try await self.describeResourcePermissions(input, logger: logger)
    }

    /// Describes the current user's special folders; the RootFolder and the RecycleBin. RootFolder is the root of user's files and folders and RecycleBin is the root of recycled items. This is not a valid action for SigV4 (administrative API) clients. This action requires an authentication token. To get an authentication token, register an application with Amazon WorkDocs. For more information, see Authentication and Access Control for User Applications in the Amazon WorkDocs Developer Guide.
    @Sendable
    @inlinable
    public func describeRootFolders(_ input: DescribeRootFoldersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeRootFoldersResponse {
        try await self.client.execute(
            operation: "DescribeRootFolders", 
            path: "/api/v1/me/root", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the current user's special folders; the RootFolder and the RecycleBin. RootFolder is the root of user's files and folders and RecycleBin is the root of recycled items. This is not a valid action for SigV4 (administrative API) clients. This action requires an authentication token. To get an authentication token, register an application with Amazon WorkDocs. For more information, see Authentication and Access Control for User Applications in the Amazon WorkDocs Developer Guide.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token.
    ///   - limit: The maximum number of items to return.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call.)
    ///   - logger: Logger use during operation
    @inlinable
    public func describeRootFolders(
        authenticationToken: String,
        limit: Int? = nil,
        marker: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeRootFoldersResponse {
        let input = DescribeRootFoldersRequest(
            authenticationToken: authenticationToken, 
            limit: limit, 
            marker: marker
        )
        return try await self.describeRootFolders(input, logger: logger)
    }

    /// Describes the specified users. You can describe all users or filter the results (for example, by status or organization). By default, Amazon WorkDocs returns the first 24 active or pending users. If there are more results, the response includes a marker that you can use to request the next set of results.
    @Sendable
    @inlinable
    public func describeUsers(_ input: DescribeUsersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeUsersResponse {
        try await self.client.execute(
            operation: "DescribeUsers", 
            path: "/api/v1/users", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the specified users. You can describe all users or filter the results (for example, by status or organization). By default, Amazon WorkDocs returns the first 24 active or pending users. If there are more results, the response includes a marker that you can use to request the next set of results.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - fields: A comma-separated list of values. Specify "STORAGE_METADATA" to include the user storage quota and utilization information.
    ///   - include: The state of the users. Specify "ALL" to include inactive users.
    ///   - limit: The maximum number of items to return.
    ///   - marker: The marker for the next set of results. (You received this marker from a previous call.)
    ///   - order: The order for the results.
    ///   - organizationId: The ID of the organization.
    ///   - query: A query to filter users by user name. Remember the following about the Userids and Query parameters:   If you don't use either parameter, the API returns a paginated list of all users on the site.   If you use both parameters, the API ignores the Query parameter.   The Userid parameter only returns user names that match a corresponding user ID.   The Query parameter runs a "prefix" search for users by the GivenName, SurName, or UserName fields included in a  CreateUser API call. For example, querying on  Ma returns Márcia Oliveira, María García, and Mateo Jackson. If you use multiple characters, the API only returns data that matches all characters. For example, querying on Ma J only  returns Mateo Jackson.
    ///   - sort: The sorting criteria.
    ///   - userIds: The IDs of the users.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeUsers(
        authenticationToken: String? = nil,
        fields: String? = nil,
        include: UserFilterType? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        order: OrderType? = nil,
        organizationId: String? = nil,
        query: String? = nil,
        sort: UserSortType? = nil,
        userIds: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeUsersResponse {
        let input = DescribeUsersRequest(
            authenticationToken: authenticationToken, 
            fields: fields, 
            include: include, 
            limit: limit, 
            marker: marker, 
            order: order, 
            organizationId: organizationId, 
            query: query, 
            sort: sort, 
            userIds: userIds
        )
        return try await self.describeUsers(input, logger: logger)
    }

    /// Retrieves details of the current user for whom the authentication token was generated. This is not a valid action for SigV4 (administrative API) clients. This action requires an authentication token. To get an authentication token, register an application with Amazon WorkDocs. For more information, see Authentication and Access Control for User Applications in the Amazon WorkDocs Developer Guide.
    @Sendable
    @inlinable
    public func getCurrentUser(_ input: GetCurrentUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCurrentUserResponse {
        try await self.client.execute(
            operation: "GetCurrentUser", 
            path: "/api/v1/me", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details of the current user for whom the authentication token was generated. This is not a valid action for SigV4 (administrative API) clients. This action requires an authentication token. To get an authentication token, register an application with Amazon WorkDocs. For more information, see Authentication and Access Control for User Applications in the Amazon WorkDocs Developer Guide.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCurrentUser(
        authenticationToken: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCurrentUserResponse {
        let input = GetCurrentUserRequest(
            authenticationToken: authenticationToken
        )
        return try await self.getCurrentUser(input, logger: logger)
    }

    /// Retrieves details of a document.
    @Sendable
    @inlinable
    public func getDocument(_ input: GetDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDocumentResponse {
        try await self.client.execute(
            operation: "GetDocument", 
            path: "/api/v1/documents/{DocumentId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details of a document.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - includeCustomMetadata: Set this to TRUE to include custom metadata in the response.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocument(
        authenticationToken: String? = nil,
        documentId: String,
        includeCustomMetadata: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDocumentResponse {
        let input = GetDocumentRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            includeCustomMetadata: includeCustomMetadata
        )
        return try await self.getDocument(input, logger: logger)
    }

    /// Retrieves the path information (the hierarchy from the root folder) for the requested document. By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested document and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the names of the parent folders.
    @Sendable
    @inlinable
    public func getDocumentPath(_ input: GetDocumentPathRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDocumentPathResponse {
        try await self.client.execute(
            operation: "GetDocumentPath", 
            path: "/api/v1/documents/{DocumentId}/path", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the path information (the hierarchy from the root folder) for the requested document. By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested document and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the names of the parent folders.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - fields: A comma-separated list of values. Specify NAME to include the names of the parent folders.
    ///   - limit: The maximum number of levels in the hierarchy to return.
    ///   - marker: This value is not supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentPath(
        authenticationToken: String? = nil,
        documentId: String,
        fields: String? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDocumentPathResponse {
        let input = GetDocumentPathRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            fields: fields, 
            limit: limit, 
            marker: marker
        )
        return try await self.getDocumentPath(input, logger: logger)
    }

    /// Retrieves version metadata for the specified document.
    @Sendable
    @inlinable
    public func getDocumentVersion(_ input: GetDocumentVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDocumentVersionResponse {
        try await self.client.execute(
            operation: "GetDocumentVersion", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves version metadata for the specified document.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - fields: A comma-separated list of values. Specify "SOURCE" to include a URL for the source document.
    ///   - includeCustomMetadata: Set this to TRUE to include custom metadata in the response.
    ///   - versionId: The version ID of the document.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDocumentVersion(
        authenticationToken: String? = nil,
        documentId: String,
        fields: String? = nil,
        includeCustomMetadata: Bool? = nil,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDocumentVersionResponse {
        let input = GetDocumentVersionRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            fields: fields, 
            includeCustomMetadata: includeCustomMetadata, 
            versionId: versionId
        )
        return try await self.getDocumentVersion(input, logger: logger)
    }

    /// Retrieves the metadata of the specified folder.
    @Sendable
    @inlinable
    public func getFolder(_ input: GetFolderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFolderResponse {
        try await self.client.execute(
            operation: "GetFolder", 
            path: "/api/v1/folders/{FolderId}", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the metadata of the specified folder.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - includeCustomMetadata: Set to TRUE to include custom metadata in the response.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFolder(
        authenticationToken: String? = nil,
        folderId: String,
        includeCustomMetadata: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFolderResponse {
        let input = GetFolderRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId, 
            includeCustomMetadata: includeCustomMetadata
        )
        return try await self.getFolder(input, logger: logger)
    }

    /// Retrieves the path information (the hierarchy from the root folder) for the specified folder. By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested folder and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the parent folder names.
    @Sendable
    @inlinable
    public func getFolderPath(_ input: GetFolderPathRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFolderPathResponse {
        try await self.client.execute(
            operation: "GetFolderPath", 
            path: "/api/v1/folders/{FolderId}/path", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the path information (the hierarchy from the root folder) for the specified folder. By default, Amazon WorkDocs returns a maximum of 100 levels upwards from the requested folder and only includes the IDs of the parent folders in the path. You can limit the maximum number of levels. You can also request the parent folder names.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - fields: A comma-separated list of values. Specify "NAME" to include the names of the parent folders.
    ///   - folderId: The ID of the folder.
    ///   - limit: The maximum number of levels in the hierarchy to return.
    ///   - marker: This value is not supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFolderPath(
        authenticationToken: String? = nil,
        fields: String? = nil,
        folderId: String,
        limit: Int? = nil,
        marker: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFolderPathResponse {
        let input = GetFolderPathRequest(
            authenticationToken: authenticationToken, 
            fields: fields, 
            folderId: folderId, 
            limit: limit, 
            marker: marker
        )
        return try await self.getFolderPath(input, logger: logger)
    }

    /// Retrieves a collection of resources, including folders and documents. The only CollectionType supported is SHARED_WITH_ME.
    @Sendable
    @inlinable
    public func getResources(_ input: GetResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetResourcesResponse {
        try await self.client.execute(
            operation: "GetResources", 
            path: "/api/v1/resources", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a collection of resources, including folders and documents. The only CollectionType supported is SHARED_WITH_ME.
    ///
    /// Parameters:
    ///   - authenticationToken: The Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - collectionType: The collection type.
    ///   - limit: The maximum number of resources to return.
    ///   - marker: The marker for the next set of results. This marker was received from a previous call.
    ///   - userId: The user ID for the resource collection. This is a required field for accessing the API operation using IAM credentials.
    ///   - logger: Logger use during operation
    @inlinable
    public func getResources(
        authenticationToken: String? = nil,
        collectionType: ResourceCollectionType? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        userId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetResourcesResponse {
        let input = GetResourcesRequest(
            authenticationToken: authenticationToken, 
            collectionType: collectionType, 
            limit: limit, 
            marker: marker, 
            userId: userId
        )
        return try await self.getResources(input, logger: logger)
    }

    /// Creates a new document object and version object. The client specifies the parent folder ID and name of the document to upload. The ID is optionally specified when creating a new version of an existing document. This is the first step to upload a document. Next, upload the document to the URL returned from the call, and then call UpdateDocumentVersion. To cancel the document upload, call AbortDocumentVersionUpload.
    @Sendable
    @inlinable
    public func initiateDocumentVersionUpload(_ input: InitiateDocumentVersionUploadRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> InitiateDocumentVersionUploadResponse {
        try await self.client.execute(
            operation: "InitiateDocumentVersionUpload", 
            path: "/api/v1/documents", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new document object and version object. The client specifies the parent folder ID and name of the document to upload. The ID is optionally specified when creating a new version of an existing document. This is the first step to upload a document. Next, upload the document to the URL returned from the call, and then call UpdateDocumentVersion. To cancel the document upload, call AbortDocumentVersionUpload.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - contentCreatedTimestamp: The timestamp when the content of the document was originally created.
    ///   - contentModifiedTimestamp: The timestamp when the content of the document was modified.
    ///   - contentType: The content type of the document.
    ///   - documentSizeInBytes: The size of the document, in bytes.
    ///   - id: The ID of the document.
    ///   - name: The name of the document.
    ///   - parentFolderId: The ID of the parent folder.
    ///   - logger: Logger use during operation
    @inlinable
    public func initiateDocumentVersionUpload(
        authenticationToken: String? = nil,
        contentCreatedTimestamp: Date? = nil,
        contentModifiedTimestamp: Date? = nil,
        contentType: String? = nil,
        documentSizeInBytes: Int64? = nil,
        id: String? = nil,
        name: String? = nil,
        parentFolderId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> InitiateDocumentVersionUploadResponse {
        let input = InitiateDocumentVersionUploadRequest(
            authenticationToken: authenticationToken, 
            contentCreatedTimestamp: contentCreatedTimestamp, 
            contentModifiedTimestamp: contentModifiedTimestamp, 
            contentType: contentType, 
            documentSizeInBytes: documentSizeInBytes, 
            id: id, 
            name: name, 
            parentFolderId: parentFolderId
        )
        return try await self.initiateDocumentVersionUpload(input, logger: logger)
    }

    /// Removes all the permissions from the specified resource.
    @Sendable
    @inlinable
    public func removeAllResourcePermissions(_ input: RemoveAllResourcePermissionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RemoveAllResourcePermissions", 
            path: "/api/v1/resources/{ResourceId}/permissions", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes all the permissions from the specified resource.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeAllResourcePermissions(
        authenticationToken: String? = nil,
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RemoveAllResourcePermissionsRequest(
            authenticationToken: authenticationToken, 
            resourceId: resourceId
        )
        return try await self.removeAllResourcePermissions(input, logger: logger)
    }

    /// Removes the permission for the specified principal from the specified resource.
    @Sendable
    @inlinable
    public func removeResourcePermission(_ input: RemoveResourcePermissionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RemoveResourcePermission", 
            path: "/api/v1/resources/{ResourceId}/permissions/{PrincipalId}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the permission for the specified principal from the specified resource.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - principalId: The principal ID of the resource.
    ///   - principalType: The principal type of the resource.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeResourcePermission(
        authenticationToken: String? = nil,
        principalId: String,
        principalType: PrincipalType? = nil,
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RemoveResourcePermissionRequest(
            authenticationToken: authenticationToken, 
            principalId: principalId, 
            principalType: principalType, 
            resourceId: resourceId
        )
        return try await self.removeResourcePermission(input, logger: logger)
    }

    /// Recovers a deleted version of an Amazon WorkDocs document.
    @Sendable
    @inlinable
    public func restoreDocumentVersions(_ input: RestoreDocumentVersionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "RestoreDocumentVersions", 
            path: "/api/v1/documentVersions/restore/{DocumentId}", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Recovers a deleted version of an Amazon WorkDocs document.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - logger: Logger use during operation
    @inlinable
    public func restoreDocumentVersions(
        authenticationToken: String? = nil,
        documentId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = RestoreDocumentVersionsRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId
        )
        return try await self.restoreDocumentVersions(input, logger: logger)
    }

    /// Searches metadata and the content of folders, documents, document versions, and comments.
    @Sendable
    @inlinable
    public func searchResources(_ input: SearchResourcesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SearchResourcesResponse {
        try await self.client.execute(
            operation: "SearchResources", 
            path: "/api/v1/search", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Searches metadata and the content of folders, documents, document versions, and comments.
    ///
    /// Parameters:
    ///   - additionalResponseFields: A list of attributes to include in the response. Used to request fields that are not normally returned in a standard response.
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - filters: Filters results based on entity metadata.
    ///   - limit: Max results count per page.
    ///   - marker: The marker for the next set of results.
    ///   - orderBy: Order by results in one or more categories.
    ///   - organizationId: Filters based on the resource owner OrgId. This is a mandatory parameter when using Admin SigV4 credentials.
    ///   - queryScopes: Filter based on the text field type. A Folder has only a name and no content. A Comment has only content and no name. A Document or Document Version has a name and content
    ///   - queryText: The String to search for. Searches across different text fields based on request parameters. Use double quotes around the query string for exact phrase matches.
    ///   - logger: Logger use during operation
    @inlinable
    public func searchResources(
        additionalResponseFields: [AdditionalResponseFieldType]? = nil,
        authenticationToken: String? = nil,
        filters: Filters? = nil,
        limit: Int? = nil,
        marker: String? = nil,
        orderBy: [SearchSortResult]? = nil,
        organizationId: String? = nil,
        queryScopes: [SearchQueryScopeType]? = nil,
        queryText: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SearchResourcesResponse {
        let input = SearchResourcesRequest(
            additionalResponseFields: additionalResponseFields, 
            authenticationToken: authenticationToken, 
            filters: filters, 
            limit: limit, 
            marker: marker, 
            orderBy: orderBy, 
            organizationId: organizationId, 
            queryScopes: queryScopes, 
            queryText: queryText
        )
        return try await self.searchResources(input, logger: logger)
    }

    /// Updates the specified attributes of a document. The user must have access to both the document and its parent folder, if applicable.
    @Sendable
    @inlinable
    public func updateDocument(_ input: UpdateDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateDocument", 
            path: "/api/v1/documents/{DocumentId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified attributes of a document. The user must have access to both the document and its parent folder, if applicable.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - name: The name of the document.
    ///   - parentFolderId: The ID of the parent folder.
    ///   - resourceState: The resource state of the document. Only ACTIVE and RECYCLED are supported.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocument(
        authenticationToken: String? = nil,
        documentId: String,
        name: String? = nil,
        parentFolderId: String? = nil,
        resourceState: ResourceStateType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateDocumentRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            name: name, 
            parentFolderId: parentFolderId, 
            resourceState: resourceState
        )
        return try await self.updateDocument(input, logger: logger)
    }

    /// Changes the status of the document version to ACTIVE.  Amazon WorkDocs also sets its document container to ACTIVE. This is the last step in a document upload, after the client uploads the document to an S3-presigned URL returned by InitiateDocumentVersionUpload.
    @Sendable
    @inlinable
    public func updateDocumentVersion(_ input: UpdateDocumentVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateDocumentVersion", 
            path: "/api/v1/documents/{DocumentId}/versions/{VersionId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Changes the status of the document version to ACTIVE.  Amazon WorkDocs also sets its document container to ACTIVE. This is the last step in a document upload, after the client uploads the document to an S3-presigned URL returned by InitiateDocumentVersionUpload.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - versionId: The version ID of the document.
    ///   - versionStatus: The status of the version.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDocumentVersion(
        authenticationToken: String? = nil,
        documentId: String,
        versionId: String,
        versionStatus: DocumentVersionStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateDocumentVersionRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            versionId: versionId, 
            versionStatus: versionStatus
        )
        return try await self.updateDocumentVersion(input, logger: logger)
    }

    /// Updates the specified attributes of the specified folder. The user must have access to both the folder and its parent folder, if applicable.
    @Sendable
    @inlinable
    public func updateFolder(_ input: UpdateFolderRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "UpdateFolder", 
            path: "/api/v1/folders/{FolderId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified attributes of the specified folder. The user must have access to both the folder and its parent folder, if applicable.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - name: The name of the folder.
    ///   - parentFolderId: The ID of the parent folder.
    ///   - resourceState: The resource state of the folder. Only ACTIVE and RECYCLED are accepted values from the API.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFolder(
        authenticationToken: String? = nil,
        folderId: String,
        name: String? = nil,
        parentFolderId: String? = nil,
        resourceState: ResourceStateType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = UpdateFolderRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId, 
            name: name, 
            parentFolderId: parentFolderId, 
            resourceState: resourceState
        )
        return try await self.updateFolder(input, logger: logger)
    }

    /// Updates the specified attributes of the specified user, and grants or revokes administrative privileges to the Amazon WorkDocs site.
    @Sendable
    @inlinable
    public func updateUser(_ input: UpdateUserRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateUserResponse {
        try await self.client.execute(
            operation: "UpdateUser", 
            path: "/api/v1/users/{UserId}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified attributes of the specified user, and grants or revokes administrative privileges to the Amazon WorkDocs site.
    ///
    /// Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - givenName: The given name of the user.
    ///   - grantPoweruserPrivileges: Boolean value to determine whether the user is granted Power user privileges.
    ///   - locale: The locale of the user.
    ///   - storageRule: The amount of storage for the user.
    ///   - surname: The surname of the user.
    ///   - timeZoneId: The time zone ID of the user.
    ///   - type: The type of the user.
    ///   - userId: The ID of the user.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateUser(
        authenticationToken: String? = nil,
        givenName: String? = nil,
        grantPoweruserPrivileges: BooleanEnumType? = nil,
        locale: LocaleType? = nil,
        storageRule: StorageRuleType? = nil,
        surname: String? = nil,
        timeZoneId: String? = nil,
        type: UserType? = nil,
        userId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateUserResponse {
        let input = UpdateUserRequest(
            authenticationToken: authenticationToken, 
            givenName: givenName, 
            grantPoweruserPrivileges: grantPoweruserPrivileges, 
            locale: locale, 
            storageRule: storageRule, 
            surname: surname, 
            timeZoneId: timeZoneId, 
            type: type, 
            userId: userId
        )
        return try await self.updateUser(input, logger: logger)
    }
}

extension WorkDocs {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: WorkDocs, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension WorkDocs {
    /// Return PaginatorSequence for operation ``describeActivities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActivitiesPaginator(
        _ input: DescribeActivitiesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeActivitiesRequest, DescribeActivitiesResponse> {
        return .init(
            input: input,
            command: self.describeActivities,
            inputKey: \DescribeActivitiesRequest.marker,
            outputKey: \DescribeActivitiesResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeActivities(_:logger:)``.
    ///
    /// - Parameters:
    ///   - activityTypes: Specifies which activity types to include in the response. If this field is left empty, all activity types are returned.
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - endTime: The timestamp that determines the end time of the activities. The response includes the activities performed before the specified timestamp.
    ///   - includeIndirectActivities: Includes indirect activities. An indirect activity results from a direct activity performed on a parent resource. For example, sharing a parent folder (the direct activity) shares all of the subfolders and documents within the parent folder (the indirect activity).
    ///   - limit: The maximum number of items to return.
    ///   - organizationId: The ID of the organization. This is a mandatory parameter when using administrative API (SigV4) requests.
    ///   - resourceId: The document or folder ID for which to describe activity types.
    ///   - startTime: The timestamp that determines the starting time of the activities. The response includes the activities performed after the specified timestamp.
    ///   - userId: The ID of the user who performed the action. The response includes activities pertaining to this user. This is an optional parameter and is only applicable for administrative API (SigV4) requests.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeActivitiesPaginator(
        activityTypes: String? = nil,
        authenticationToken: String? = nil,
        endTime: Date? = nil,
        includeIndirectActivities: Bool? = nil,
        limit: Int? = nil,
        organizationId: String? = nil,
        resourceId: String? = nil,
        startTime: Date? = nil,
        userId: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeActivitiesRequest, DescribeActivitiesResponse> {
        let input = DescribeActivitiesRequest(
            activityTypes: activityTypes, 
            authenticationToken: authenticationToken, 
            endTime: endTime, 
            includeIndirectActivities: includeIndirectActivities, 
            limit: limit, 
            organizationId: organizationId, 
            resourceId: resourceId, 
            startTime: startTime, 
            userId: userId
        )
        return self.describeActivitiesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeComments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeCommentsPaginator(
        _ input: DescribeCommentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeCommentsRequest, DescribeCommentsResponse> {
        return .init(
            input: input,
            command: self.describeComments,
            inputKey: \DescribeCommentsRequest.marker,
            outputKey: \DescribeCommentsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeComments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - limit: The maximum number of items to return.
    ///   - versionId: The ID of the document version.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeCommentsPaginator(
        authenticationToken: String? = nil,
        documentId: String,
        limit: Int? = nil,
        versionId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeCommentsRequest, DescribeCommentsResponse> {
        let input = DescribeCommentsRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            limit: limit, 
            versionId: versionId
        )
        return self.describeCommentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeDocumentVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDocumentVersionsPaginator(
        _ input: DescribeDocumentVersionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeDocumentVersionsRequest, DescribeDocumentVersionsResponse> {
        return .init(
            input: input,
            command: self.describeDocumentVersions,
            inputKey: \DescribeDocumentVersionsRequest.marker,
            outputKey: \DescribeDocumentVersionsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeDocumentVersions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - documentId: The ID of the document.
    ///   - fields: Specify "SOURCE" to include initialized versions and a URL for the source document.
    ///   - include: A comma-separated list of values. Specify "INITIALIZED" to include incomplete versions.
    ///   - limit: The maximum number of versions to return with this call.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeDocumentVersionsPaginator(
        authenticationToken: String? = nil,
        documentId: String,
        fields: String? = nil,
        include: String? = nil,
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeDocumentVersionsRequest, DescribeDocumentVersionsResponse> {
        let input = DescribeDocumentVersionsRequest(
            authenticationToken: authenticationToken, 
            documentId: documentId, 
            fields: fields, 
            include: include, 
            limit: limit
        )
        return self.describeDocumentVersionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeFolderContents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFolderContentsPaginator(
        _ input: DescribeFolderContentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeFolderContentsRequest, DescribeFolderContentsResponse> {
        return .init(
            input: input,
            command: self.describeFolderContents,
            inputKey: \DescribeFolderContentsRequest.marker,
            outputKey: \DescribeFolderContentsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeFolderContents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - folderId: The ID of the folder.
    ///   - include: The contents to include. Specify "INITIALIZED" to include initialized documents.
    ///   - limit: The maximum number of items to return with this call.
    ///   - order: The order for the contents of the folder.
    ///   - sort: The sorting criteria.
    ///   - type: The type of items.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeFolderContentsPaginator(
        authenticationToken: String? = nil,
        folderId: String,
        include: String? = nil,
        limit: Int? = nil,
        order: OrderType? = nil,
        sort: ResourceSortType? = nil,
        type: FolderContentType? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeFolderContentsRequest, DescribeFolderContentsResponse> {
        let input = DescribeFolderContentsRequest(
            authenticationToken: authenticationToken, 
            folderId: folderId, 
            include: include, 
            limit: limit, 
            order: order, 
            sort: sort, 
            type: type
        )
        return self.describeFolderContentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeGroupsPaginator(
        _ input: DescribeGroupsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeGroupsRequest, DescribeGroupsResponse> {
        return .init(
            input: input,
            command: self.describeGroups,
            inputKey: \DescribeGroupsRequest.marker,
            outputKey: \DescribeGroupsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeGroups(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - limit: The maximum number of items to return with this call.
    ///   - organizationId: The ID of the organization.
    ///   - searchQuery: A query to describe groups by group name.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeGroupsPaginator(
        authenticationToken: String? = nil,
        limit: Int? = nil,
        organizationId: String? = nil,
        searchQuery: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeGroupsRequest, DescribeGroupsResponse> {
        let input = DescribeGroupsRequest(
            authenticationToken: authenticationToken, 
            limit: limit, 
            organizationId: organizationId, 
            searchQuery: searchQuery
        )
        return self.describeGroupsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeNotificationSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeNotificationSubscriptionsPaginator(
        _ input: DescribeNotificationSubscriptionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeNotificationSubscriptionsRequest, DescribeNotificationSubscriptionsResponse> {
        return .init(
            input: input,
            command: self.describeNotificationSubscriptions,
            inputKey: \DescribeNotificationSubscriptionsRequest.marker,
            outputKey: \DescribeNotificationSubscriptionsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeNotificationSubscriptions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - limit: The maximum number of items to return with this call.
    ///   - organizationId: The ID of the organization.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeNotificationSubscriptionsPaginator(
        limit: Int? = nil,
        organizationId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeNotificationSubscriptionsRequest, DescribeNotificationSubscriptionsResponse> {
        let input = DescribeNotificationSubscriptionsRequest(
            limit: limit, 
            organizationId: organizationId
        )
        return self.describeNotificationSubscriptionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeResourcePermissions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeResourcePermissionsPaginator(
        _ input: DescribeResourcePermissionsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeResourcePermissionsRequest, DescribeResourcePermissionsResponse> {
        return .init(
            input: input,
            command: self.describeResourcePermissions,
            inputKey: \DescribeResourcePermissionsRequest.marker,
            outputKey: \DescribeResourcePermissionsResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeResourcePermissions(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - limit: The maximum number of items to return with this call.
    ///   - principalId: The ID of the principal to filter permissions by.
    ///   - resourceId: The ID of the resource.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeResourcePermissionsPaginator(
        authenticationToken: String? = nil,
        limit: Int? = nil,
        principalId: String? = nil,
        resourceId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeResourcePermissionsRequest, DescribeResourcePermissionsResponse> {
        let input = DescribeResourcePermissionsRequest(
            authenticationToken: authenticationToken, 
            limit: limit, 
            principalId: principalId, 
            resourceId: resourceId
        )
        return self.describeResourcePermissionsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeRootFolders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRootFoldersPaginator(
        _ input: DescribeRootFoldersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeRootFoldersRequest, DescribeRootFoldersResponse> {
        return .init(
            input: input,
            command: self.describeRootFolders,
            inputKey: \DescribeRootFoldersRequest.marker,
            outputKey: \DescribeRootFoldersResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeRootFolders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token.
    ///   - limit: The maximum number of items to return.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeRootFoldersPaginator(
        authenticationToken: String,
        limit: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeRootFoldersRequest, DescribeRootFoldersResponse> {
        let input = DescribeRootFoldersRequest(
            authenticationToken: authenticationToken, 
            limit: limit
        )
        return self.describeRootFoldersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``describeUsers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func describeUsersPaginator(
        _ input: DescribeUsersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<DescribeUsersRequest, DescribeUsersResponse> {
        return .init(
            input: input,
            command: self.describeUsers,
            inputKey: \DescribeUsersRequest.marker,
            outputKey: \DescribeUsersResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``describeUsers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - fields: A comma-separated list of values. Specify "STORAGE_METADATA" to include the user storage quota and utilization information.
    ///   - include: The state of the users. Specify "ALL" to include inactive users.
    ///   - limit: The maximum number of items to return.
    ///   - order: The order for the results.
    ///   - organizationId: The ID of the organization.
    ///   - query: A query to filter users by user name. Remember the following about the Userids and Query parameters:   If you don't use either parameter, the API returns a paginated list of all users on the site.   If you use both parameters, the API ignores the Query parameter.   The Userid parameter only returns user names that match a corresponding user ID.   The Query parameter runs a "prefix" search for users by the GivenName, SurName, or UserName fields included in a  CreateUser API call. For example, querying on  Ma returns Márcia Oliveira, María García, and Mateo Jackson. If you use multiple characters, the API only returns data that matches all characters. For example, querying on Ma J only  returns Mateo Jackson.
    ///   - sort: The sorting criteria.
    ///   - userIds: The IDs of the users.
    ///   - logger: Logger used for logging
    @inlinable
    public func describeUsersPaginator(
        authenticationToken: String? = nil,
        fields: String? = nil,
        include: UserFilterType? = nil,
        limit: Int? = nil,
        order: OrderType? = nil,
        organizationId: String? = nil,
        query: String? = nil,
        sort: UserSortType? = nil,
        userIds: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<DescribeUsersRequest, DescribeUsersResponse> {
        let input = DescribeUsersRequest(
            authenticationToken: authenticationToken, 
            fields: fields, 
            include: include, 
            limit: limit, 
            order: order, 
            organizationId: organizationId, 
            query: query, 
            sort: sort, 
            userIds: userIds
        )
        return self.describeUsersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``searchResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func searchResourcesPaginator(
        _ input: SearchResourcesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<SearchResourcesRequest, SearchResourcesResponse> {
        return .init(
            input: input,
            command: self.searchResources,
            inputKey: \SearchResourcesRequest.marker,
            outputKey: \SearchResourcesResponse.marker,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``searchResources(_:logger:)``.
    ///
    /// - Parameters:
    ///   - additionalResponseFields: A list of attributes to include in the response. Used to request fields that are not normally returned in a standard response.
    ///   - authenticationToken: Amazon WorkDocs authentication token. Not required when using Amazon Web Services administrator credentials to access the API.
    ///   - filters: Filters results based on entity metadata.
    ///   - limit: Max results count per page.
    ///   - orderBy: Order by results in one or more categories.
    ///   - organizationId: Filters based on the resource owner OrgId. This is a mandatory parameter when using Admin SigV4 credentials.
    ///   - queryScopes: Filter based on the text field type. A Folder has only a name and no content. A Comment has only content and no name. A Document or Document Version has a name and content
    ///   - queryText: The String to search for. Searches across different text fields based on request parameters. Use double quotes around the query string for exact phrase matches.
    ///   - logger: Logger used for logging
    @inlinable
    public func searchResourcesPaginator(
        additionalResponseFields: [AdditionalResponseFieldType]? = nil,
        authenticationToken: String? = nil,
        filters: Filters? = nil,
        limit: Int? = nil,
        orderBy: [SearchSortResult]? = nil,
        organizationId: String? = nil,
        queryScopes: [SearchQueryScopeType]? = nil,
        queryText: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<SearchResourcesRequest, SearchResourcesResponse> {
        let input = SearchResourcesRequest(
            additionalResponseFields: additionalResponseFields, 
            authenticationToken: authenticationToken, 
            filters: filters, 
            limit: limit, 
            orderBy: orderBy, 
            organizationId: organizationId, 
            queryScopes: queryScopes, 
            queryText: queryText
        )
        return self.searchResourcesPaginator(input, logger: logger)
    }
}

extension WorkDocs.DescribeActivitiesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeActivitiesRequest {
        return .init(
            activityTypes: self.activityTypes,
            authenticationToken: self.authenticationToken,
            endTime: self.endTime,
            includeIndirectActivities: self.includeIndirectActivities,
            limit: self.limit,
            marker: token,
            organizationId: self.organizationId,
            resourceId: self.resourceId,
            startTime: self.startTime,
            userId: self.userId
        )
    }
}

extension WorkDocs.DescribeCommentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeCommentsRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            documentId: self.documentId,
            limit: self.limit,
            marker: token,
            versionId: self.versionId
        )
    }
}

extension WorkDocs.DescribeDocumentVersionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeDocumentVersionsRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            documentId: self.documentId,
            fields: self.fields,
            include: self.include,
            limit: self.limit,
            marker: token
        )
    }
}

extension WorkDocs.DescribeFolderContentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeFolderContentsRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            folderId: self.folderId,
            include: self.include,
            limit: self.limit,
            marker: token,
            order: self.order,
            sort: self.sort,
            type: self.type
        )
    }
}

extension WorkDocs.DescribeGroupsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeGroupsRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            limit: self.limit,
            marker: token,
            organizationId: self.organizationId,
            searchQuery: self.searchQuery
        )
    }
}

extension WorkDocs.DescribeNotificationSubscriptionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeNotificationSubscriptionsRequest {
        return .init(
            limit: self.limit,
            marker: token,
            organizationId: self.organizationId
        )
    }
}

extension WorkDocs.DescribeResourcePermissionsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeResourcePermissionsRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            limit: self.limit,
            marker: token,
            principalId: self.principalId,
            resourceId: self.resourceId
        )
    }
}

extension WorkDocs.DescribeRootFoldersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeRootFoldersRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            limit: self.limit,
            marker: token
        )
    }
}

extension WorkDocs.DescribeUsersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.DescribeUsersRequest {
        return .init(
            authenticationToken: self.authenticationToken,
            fields: self.fields,
            include: self.include,
            limit: self.limit,
            marker: token,
            order: self.order,
            organizationId: self.organizationId,
            query: self.query,
            sort: self.sort,
            userIds: self.userIds
        )
    }
}

extension WorkDocs.SearchResourcesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> WorkDocs.SearchResourcesRequest {
        return .init(
            additionalResponseFields: self.additionalResponseFields,
            authenticationToken: self.authenticationToken,
            filters: self.filters,
            limit: self.limit,
            marker: token,
            orderBy: self.orderBy,
            organizationId: self.organizationId,
            queryScopes: self.queryScopes,
            queryText: self.queryText
        )
    }
}
